package com.bamboo.core.filters;

import org.springframework.web.util.ContentCachingRequestWrapper;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
* @description 将Request做一个包装，这样Request中的流就可以多次读取，默认Request的流只能被读取一次
 * 在AOP中获取body的参数需要从输入流中读取，如果接口中使用@RequestBody接收了参数，就相当于Request的流被读取了一次，
 * 会导致AOP中无法通过Request获取body的参数
* @date 2025/3/7 16:06
* @author chenzh
*/
public class WrapperRequestFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 包装原始请求以支持重复读取
        ContentCachingRequestWrapper wrappedRequest =
                new ContentCachingRequestWrapper((HttpServletRequest) request);
        // 传递包装后的对象
        chain.doFilter(wrappedRequest, response);
    }
}
